package com.dragon.modules.yuegou.enums.wallet;

import com.fasterxml.jackson.annotation.JsonCreator;

import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 时长单位
 * 
 * @author pbuilder generated
 *
 */
public enum CardTemplatePeriodUnit {

	/**
	 * 分钟
	 */
	MINUTE(0, "分钟", ChronoUnit.MINUTES),
	/**
	 * 小时
	 */
	HOUR(1, "小时", ChronoUnit.HOURS),
	/**
	 * 天
	 */
	DAY(2, "天", ChronoUnit.DAYS),
	/**
	 * 月
	 */
	MONTH(3, "月", ChronoUnit.MONTHS),
	/**
	 * 年
	 */
	YEAR(4, "年", ChronoUnit.YEARS);

	/**
	 * 枚举标识
	 */
	private final Integer code;

	/**
	 * 别名
	 */
	private final String alias;

	private final ChronoUnit unit;
	
	private CardTemplatePeriodUnit(Integer code, String alias, ChronoUnit unit) {
		this.code = code;
		this.alias = alias;
		this.unit = unit;
	}
	
	public Integer getValue() {
		return code;
	}

	/**
	 * 枚举标识
	 * 
	 * @return code
	 */
	public Integer getCode() {
		return code;
	}

	/**
	 * 获取时间单位
	 * @return unit
	 */
	public ChronoUnit getUnit() {
		return unit;
	}

	/**
	 * 别名
	 * 
	 * @return alias
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * 把code转化为费用类型枚举
	 * 
	 * @param code 代码
	 * @return
	 */
	@JsonCreator
	public static CardTemplatePeriodUnit from(Integer code) {
		if (code == null) {
			return null;
		}
		return CODE_MAP.get(code);
	}

	/**
	 * Code Map for CardTemplatePeriodUnit
	 */
	private static final Map<Integer, CardTemplatePeriodUnit> CODE_MAP = Stream.of(CardTemplatePeriodUnit.values())
			.collect(Collectors.toMap(CardTemplatePeriodUnit::getCode, e -> e));

}
